package com.imagefake.util;

import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;

import jakarta.annotation.Resource;
import java.util.concurrent.TimeUnit;


/**
 * JwtRedis工具类，用于在redis中对于Jwt的存取，过期时间设置
 *
 * @author wj
 */
@Component
@Slf4j
public class JwtRedisUtil {

    @Resource(name = "redisTemplate")
    private RedisTemplate<Object, Object> redisTemplate;


    /**
     * 存入JWT
     *
     * @param key   JWT字符串的ID(用户ID)
     * @param value JWt字符串
     * @return 是否成功存入JWT字符串
     */
    public boolean insertJwt(String key, String value) {
        try {
            redisTemplate.opsForValue().set("logintoken:" + key, value, 15, TimeUnit.MINUTES);
        } catch (Exception e) {
            log.error(e.toString());
            return false;
        }
        return true;
    }

    /**
     * 获取JWT
     *
     * @param key JWT字符串的ID(用户ID)
     * @return JWT字符串
     */
    public String getJwt(String key) {
        Object value = redisTemplate.opsForValue().get("logintoken:" + key);
        return value != null ? value.toString() : null;
    }

    /**
     * 删除JWT
     *
     * @param key JWT字符串的ID(用户ID)
     * @return 是否成功删除JWT字符串
     */
    public boolean deleteJwt(String key) {
        try {
            redisTemplate.delete("logintoken:" + key);
        } catch (Exception e) {
            log.error(e.toString());
            return false;
        }
        return true;
    }

    /**
     * 判断对应用户的Jwt是否存在于redis中
     *
     * @param key JWT字符串的ID(用户ID)
     * @return 是否存在JWT字符串
     */
    public Boolean isJwtExists(String key) {
        return redisTemplate.hasKey("logintoken:" + key);
    }
}
